package com.okq.util;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;

import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 描述 : 时间日期工具类
 * 作者 : zdl
 * 日期 : 2017/2/22 16:39
 */
public class TimeTool {

	/**
	 * 日志
	 */
	private static final Logger logger = Logger.getLogger(TimeTool.class);

	/**
	 * 返回系统当前时间 格式：yyyy-MM-dd HH:mm:ss
	 *
	 * @return 格式化后的日期
	 */
	public static String getNowTime() {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		return formatter.format(new Date());
	}

	/**
	 * 根据按照给定的字符串格式返回日期字符串
	 *
	 * @param date：日期
	 * @param format：指定格式
	 * @return 返回格式化后的日期
	 */
	public static String formatDate(Date date, String format) {
		try {
			if (date == null) {
				return "";
			} else {
				// 设置日期格式
				SimpleDateFormat sdf = new SimpleDateFormat(format);
				String str = sdf.format(date);
				return str;
			}
		} catch (Exception e) {
			logger.error(e.getMessage(), e);
		}
		return null;
	}

	/**
	 * 根据按照指定的字符串格式返回日期字符串
	 *
	 * @param t：日期
	 * @param format：指定格式
	 * @return 返回格式化后的日期
	 */
	public static String timestampToString(Timestamp t, String format) {
		try {
			if (t == null) {
				return "";
			} else {
				// 设置日期格式
				DateFormat df = new SimpleDateFormat(format);
				String str = df.format(t);
				return str;
			}
		} catch (Exception e) {
			logger.error(e.getMessage(), e);
		}
		return null;
	}

	/**
	 * 根据yyyy-MM-dd HH:mm:ss日期获取yyyy年M月d日H点m分s秒日期
	 *
	 * @param time
	 *            yyyy-MM-dd HH:mm:ss日期
	 * @return 中文日期
	 */
	public static String timeToCharDate(String time) {
		try {
			if (StringUtils.isNotBlank(time)) {
				SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				Date date = sdf.parse(time);
				SimpleDateFormat sdfStr = new SimpleDateFormat("yyyy年M月d日H点m分s秒");
				return sdfStr.format(date);
			}
		} catch (Exception e) {
			logger.error(e.getMessage(), e);
		}
		return null;
	}

	/**
	 * 字符串日期转换为Date
	 *
	 * @param timeStr
	 *            日期字符串
	 * @return Date类型日期
	 */
	public static Date stringToDate(String timeStr, String format) {
		Date date = null;
		try {
			if (StringUtils.isNotBlank(timeStr)) {
				SimpleDateFormat sdf = new SimpleDateFormat(format);
				date = sdf.parse(timeStr);
			}
		} catch (ParseException e) {
			logger.info(e.getMessage(), e);
		}
		return date;
	}
}
